package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ICompanyBalanceDAO;
import org.jsola.hr.dto.CompanyBalanceAddDTO;
import org.jsola.hr.dto.CompanyBalanceUpdateDTO;
import org.jsola.hr.entity.CompanyBalanceDO;
import org.jsola.hr.query.CompanyBalanceQuery;
import org.jsola.hr.vo.CompanyBalanceListVO;
import org.jsola.hr.vo.CompanyBalanceVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 用工单位账面余额表
 *
 * @author zhr
 */
public interface ICompanyBalanceService extends IService<ICompanyBalanceDAO, CompanyBalanceDO> {

    /**
     * 新增用工单位账面余额表
     *
     * @param companyBalanceAddDTO 新增用工单位账面余额表DTO
     * @param tokenUser            当前用户
     * @return 用工单位账面余额表详情信息
     */
    CompanyBalanceVO save(CompanyBalanceAddDTO companyBalanceAddDTO, TokenUser tokenUser);

    /**
     * 修改用工单位账面余额表
     *
     * @param companyBalanceUpdateDTO 修改用工单位账面余额表DTO
     * @param tokenUser               当前用户
     * @return 更新数量
     */
    int update(CompanyBalanceUpdateDTO companyBalanceUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除用工单位账面余额表，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser         当前用户
     * @param companyBalanceIds 用工单位账面余额表id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, Long... companyBalanceIds);

    /**
     * 根据用工单位账面余额表id查找
     *
     * @param companyBalanceId 用工单位账面余额表id
     * @param siteId           所属站点id
     * @return 用工单位账面余额表详情信息
     */
    CompanyBalanceVO selectById(Long companyBalanceId, String siteId);

    /**
     * 根据siteId查找
     *
     * @param siteId 租户id
     * @return 用工单位账面余额表详情信息
     */
    CompanyBalanceVO selectBySiteId(String siteId);

    /**
     * 根据用工单位账面余额表id查找
     *
     * @param companyIds 用工单位ids
     * @param siteId     所属站点id
     * @return 用工单位账面余额表
     */
    CompanyBalanceVO selectByCompanyIds(String[] companyIds, String siteId);

    /**
     * 查询用工单位账面余额表
     *
     * @param companyBalanceQuery 查询条件
     * @param siteId              所属站点id
     * @return 用工单位账面余额表列表信息
     */
    List<CompanyBalanceListVO> select(CompanyBalanceQuery companyBalanceQuery, String siteId);

    /**
     * 查询用工单位账面余额表记录数
     *
     * @param companyBalanceQuery 查询条件
     * @param siteId              所属站点id
     * @return 用工单位账面余额表记录数
     */
    int selectCount(CompanyBalanceQuery companyBalanceQuery, String siteId);

    /**
     * 分页查询用工单位账面余额表
     *
     * @param companyBalanceQuery 查询条件
     * @param siteId              所属站点id
     * @return 用工单位账面余额表列表信息
     */
    Page<CompanyBalanceListVO> selectPage(CompanyBalanceQuery companyBalanceQuery, String siteId);


    /**
     * 根据用工单位账面余额表id查找
     *
     * @param companyBalanceId 用工单位账面余额表id
     * @param siteId           所属站点id
     * @return 用工单位账面余额表
     */
    CompanyBalanceDO selectDOById(Long companyBalanceId, String siteId);

    /**
     * 查询用工单位账面余额表
     *
     * @param companyBalanceQuery 查询条件
     * @param siteId              所属站点id
     * @return 用工单位账面余额表列表
     */
    List<CompanyBalanceDO> selectDO(CompanyBalanceQuery companyBalanceQuery, String siteId);

    /**
     * 查询用工单位账面余额表
     *
     * @param companyId 用工单位id
     * @param siteId    所属站点id
     * @return 用工单位账面余额表列表
     */
    CompanyBalanceDO selectByCompanyId(String companyId, String siteId);

    /**
     * 查询所有用工单位账面余额表
     *
     * @return 用工单位账面余额表列表
     */
    List<CompanyBalanceDO> selectAll();

}


